package models;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import javax.persistence.*;

import play.data.validation.Required;
import play.db.jpa.Model;

@Entity
public class CISService extends Model{

	@Required
	public String nom;
	
	@ManyToMany
	public List<Agent> responsables;
	
	public CISService(String nom){
		this.nom=nom;
		responsables=new ArrayList<Agent>();
	}
	
	public String getNom() {
		return nom;
	}

	public void setNom(String nom) {
		this.nom = nom;
	}

	public String toString(){
		return this.nom;
	}

	public List<Agent> getResponsables() {
		return responsables;
	}

	public void setResponsables(List<Agent> responsables) {
		this.responsables = responsables;
		this.save();
	}
	
	public void addResponsable(Agent agent){
		Iterator<Agent> it=responsables.iterator();
		boolean add=true;
		while(it.hasNext()){
			Agent a=it.next();
			if(a.equals(agent)){
				add=false;
			}
		}
		if(add){
			responsables.add(agent);
		}
		this.save();
	}
	
	public void enleverResponsable(Agent agent){
		responsables.remove(agent);
		this.save();
	}
	
	/**
	 * rend true si l'agent est responsable d'au moins un CIS ou service
	 * @param agent agent a tester
	 * @return boolean
	 */
	public boolean isResponsable(Agent agent){
		//iterator sur la liste des CISService
		List<CISService> listCISService=CISService.findAll();
		Iterator<CISService> it=listCISService.iterator();
		while(it.hasNext()){
			CISService cis=it.next();
			List<Agent> listResp=cis.getResponsables();
			//iterator sur la liste des responsable du CISService actuel
			Iterator<Agent> it2=listResp.iterator();
			while(it2.hasNext()){
				if(agent.equals(it2.next())){
					return true;
				}
			}
		}
		return false;
	}
	
	/**
	 * retourne la liste des CISService dont l'agent est reponsable (et donc dans la liste des responsables)
	 * @param agent
	 * @return
	 */
	public static List<CISService> getResponsabiliteeCISService(Agent agent){
		//iterator sur la liste des CISService
		List<CISService> listeResponsabilitee=new ArrayList<CISService>();
		List<CISService> listeARender=new ArrayList<CISService>();
		listeResponsabilitee=CISService.findAll();
		Iterator<CISService> it=listeResponsabilitee.iterator();
		while(it.hasNext()){
			CISService cis=it.next();
			List<Agent> listResp=cis.getResponsables();
			//iterator sur la liste des responsable du CISService actuel.
			Iterator<Agent> it2=listResp.iterator();
			while(it2.hasNext()){
				//si l'agent est present dans la liste des responsables de ce CISService
				//alors on l'ajoute a la liste que l'on retourneras en fin de fonction
				if(agent==it2.next()){
					listeARender.add(cis);
				}
			}
		}
		return listeARender;
	}
	
}
